package com.springboot.study.tests.supplier;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

/**
 * @Author: guodong
 * @Date: 2020/11/26 10:29
 * @Version: 1.0
 * @Description:
 */
public class LambdaTest {

    public static void main(String[] args) {

        /**
         *  可见我们使用Person::new 创建了一个Supplier的实例,所以利用构造器引用创建了函数式接口的实例.
         *  1.构造器引用
         *  语法:Class::new
         *  构造器引用一般都会需要用的Supplier这个函数式编程的工具包(java.util.function),他是一个函数式接口.在后面会详细介绍,这一章节先只是使用方便展示.先看下Supplier类:
         */
        Person p1 = Person.create(Person::new);
        p1.setName("张三");
        System.out.println(p1);

        /**
         *  2.对象的方法引用(包括静态方法)
         * 语法:Class::method
         * 先介绍一下Iterable接口下新增的默认方法forEach(),在其中用到了Consumer接口,他与Supplier接口类似,在此不做讲解,在java8中支持了接口中放入默认方法,该方法的定义如下:
         */
        List<Person> list = Arrays.asList(
                new Person("张三"),
                new Person("李四"),
                new Person("王五"),
                new Person("赵六"));
        list.forEach(System.out::println);
        list.forEach(Person::run);


        Supplier<Cat> catSupplier = new Supplier<Cat>() {
            @Override
            public Cat get() {
               return new Cat();
            }
        };

        System.out.println(catSupplier.get());
    }



}
